package com.payment.transactions.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.payment.transactions.model.PaymentTransaction;

@Mapper
public interface PaymentTransactionMapper {

    /**
     * 根据ID查询单个交易记录
     * 
     * @param id 交易记录ID
     * @return PaymentTransaction对象
     */
    PaymentTransaction getById(Integer id);

    /**
     * 查询所有交易记录
     * 
     * @return 交易记录列表
     */
    List<PaymentTransaction> getAll();

    /**
     * 根据条件查询交易记录
     * 
     * @param params 查询参数
     * @return 交易记录列表
     */
    List<PaymentTransaction> getByCondition(Map<String, Object> params);

    /**
     * 分页查询交易记录
     * 
     * @param params 查询参数，包含分页信息
     * @return 交易记录列表
     */
    List<PaymentTransaction> getByPage(Map<String, Object> params);

    /**
     * 查询分页总数
     * 
     * @param params 查询参数
     * @return 记录总数
     */
    Long countByPage(Map<String, Object> params);

    /**
     * 新增交易记录
     * 
     * @param transaction 交易记录对象
     * @return 影响行数
     */
    int insert(PaymentTransaction transaction);

    /**
     * 批量新增交易记录
     * 
     * @param transactions 交易记录列表
     * @return 影响行数
     */
    int insertBatch(@Param("list") List<PaymentTransaction> transactions);

    /**
     * 更新交易记录
     * 
     * @param transaction 交易记录对象
     * @return 影响行数
     */
    int update(PaymentTransaction transaction);

    /**
     * 删除交易记录（逻辑删除）
     * 
     * @param id 交易记录ID
     * @return 影响行数
     */
    int delete(Integer id);

    /**
     * 批量删除交易记录（逻辑删除）
     * 
     * @param ids ID列表
     * @return 影响行数
     */
    int deleteBatch(@Param("list") List<Integer> ids);

    /**
     * 根据交易订单号查询
     * 
     * @param transactionOrderNumber 交易订单号
     * @return PaymentTransaction对象
     */
    PaymentTransaction findByTransactionOrderNumber(String transactionOrderNumber);

    /**
     * 根据商户订单号查询
     * 
     * @param merchantOrderNumber 商户订单号
     * @return PaymentTransaction对象列表
     */
    List<PaymentTransaction> findByMerchantOrderNumber(String merchantOrderNumber);

    /**
     * 按平台统计交易数量和金额
     * 
     * @param params 查询参数
     * @return 统计结果列表
     */
    List<Map<String, Object>> countByPlatform(Map<String, Object> params);

    /**
     * 按收支类型统计交易数量和金额
     * 
     * @param params 查询参数
     * @return 统计结果列表
     */
    List<Map<String, Object>> countByIncomeExpense(Map<String, Object> params);
    
    /**
     * 按交易对象统计交易数量和金额
     * 
     * @param params 查询参数
     * @return 统计结果列表
     */
    List<Map<String, Object>> countByTransactionPartner(Map<String, Object> params);
}